# 字典 --dict
# 字典：用于存储数据据，存储大量数据据，速度比列表快，将数据与数据之间进行关联
# 并且无序(再底层无序，默认有序)

dic = {'liu': 80, (1, 2, 3): [1, 2], True: '22', 25: 22}   # 以键值对形式进行存储
print(dic)
# 字典的键：
#     可哈希的 -- 不可变的数据类型 --避免哈希冲突使用了 开放寻址法
#     不可哈希 -- 可变数据类型
#     必须唯一 -- 若不唯一后面的会把前面的值覆盖改掉
# 所以键不能用列表，错误示范
# dic = {[10, 20]: 22}

# 字典的值
#     任意

# dic = {'liu': 80, '联想': [1, 2], True: '22', '太阳': 22, 'liu': 100}
# print(dic)

# 增
# dic = {'liu': 80, '联想': [1, 2], True: '22', '太阳': 22}
# 暴力增
# dic['sun']=22
# print(dic)

# dic.setdefault('sun', 22)
# dic.setdefault('太阳', 25)
# setdefault执行步骤
# 1、会把添加的键去字典进行查询，若不存在就添加，反之不添加
# print(dic)

# 判断存在与否
# print(dic.setdefault('sun'))

# 删除
# dic = {'liu': 80, '联想': [1, 2], True: '22', '太阳': 22}
# del dic['liu'] # 通过键来删除
# print(dic)

# dic.pop(True)
# print(dic)
# print(dic.pop(True)) # 通过键来删除，返回值为被删除的值

# dic.clear() # 清空字典
# print(dic)

# 改
# dic = {'liu': 80, '联想': [1, 2], True: '22', '太阳': 22}
# dic['太阳']=20 # 暴力，若字典有该键是改，无是增
# # print(dic)
# dic1 = {1: 20, 'tang': 1776} # 非0为True
# dic1.update(dic)
# print(dic1)

# 查
# dic = {'liu': 80, '联想': [1, 2], True: '22', '太阳': 22}
# for i in dic:   # 查询到的是字典的键
#     print(i)
# print(dic.get(1))  # 通过键获取值，若没有键则就返回none
# print(dic[1])      # 通过键获取值，若没有键则就会报错

# 其他操作
# dic = {'liu': 80, '联想': [1, 2], True: '22', '太阳': 22}
# 获取键和值
# for i in dic:
#     print(i,dic.get(i))
# 获取所有键
# print(dic.keys()) # 返回值为高仿列表，支持for循环，不支持索引
# for i in dic.keys():
#     print(i)
# 获取所有值
# print(dic.values())
# for i in dic.values():
#     print(i)
# 索引不支持
# print(dic.values()[0])
# 获取所有键值对
# print(dic.items())
# for i in dic.items():
#     print(i[0], i[1])

# 解构(字典，元组，列表，字典，可迭代元素)
# a, b = 1, 2
# a, b = b, a       # (将变量名指向新值后，断掉原来的指针)
# print(a, b)
# a, b = [1, 2]
# c, d = (1, 3)
# print(a,b,c,d,)
# a, _, b = (1, 2, 3) # 必须一一对应
# c = 1, 2, 3         # 本质上是元组
# print(a, b, c)
# a, b = 'as'
# c, d = {'a': 1, 'b': 2} # 返回键
# print(a, b, c, d)
# 获取每个元素的键值对
# dic = {'liu': 80, '联想': [1, 2], True: '22', '太阳': 22}
# for i, j in dic.items():
#     print(i, j)

# 字典嵌套
# dic = {'1001': ['liu', 'wang'],
#        '1002': {'qin': {'d': ['a', 1], 's': [4, 'l']},
#                 'qo': {'f': [8,
#                              {'m': {44:'lo',96: [89, 'ui']}, 'e': 12},
#                              'pp']}}
#        }

# 寻找ui
# print(dic['1002']['qo']['f'][1]['m'][96][1])

# good = [{'name': 'l', 'pla': 200},
#         {'name': 'a', 'pla': 300},
#         {'name': 'o', 'pla': 500}]
# for i in range(len(good)):
#     print(i, good[i]['name'], good[i]['pla'])

# 题

# 将k = 'k: 0 |k1: 1|k 2:2| k3 :3 ',变为dic={'k':0,'k1':1,'k2':2,'k3':3}
# k = 'k: 0 |k1: 1|k 2:2| k3 :3'
# dic = {}
# for i in k.replace(" ", '').split('|'):
#     s, v = i.split(':')
#     dic[s] = int(v)
# print(dic)